package com.example.leonard.core.mq.mqconfig;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TopicConfig {
    @Bean
    public Queue topicQueue() {
        return new Queue(MQConstants.TOPICQUEUE);
    }

    @Bean
    public Queue topicQueues() {
        return new Queue(MQConstants.TOPICQUEUES);
    }

    @Bean
    public TopicExchange topicExchange() {
        return new TopicExchange(MQConstants.TOPICEXCHANGE);
    }

    /*
    topic模式可以根据绑定的routingKey(路由规则 可以是通配符来通配) 当队列 和交换机绑定时由bingdingKey来定义
    路由规则 可以是全路由(topic.key) 也可以是通配符 topic.# 当提供者发送消息的时候 会 发送指定的交换机 以指定的routingKey方式
    然后 topic模式佩判断 bingdingKey和routingKey的规则是否匹配 匹配的话 则消费则可以消费队列中的消息
     */
    @Bean
    Binding bindingExchangeMessage() {
        return BindingBuilder.bind(topicQueue()).to(topicExchange()).with(MQConstants.TOPIC_ROUTING_KEYS);
    }

    @Bean
    Binding bindingExchangeMessages() {
        return BindingBuilder.bind(topicQueues()).to(topicExchange()).with(MQConstants.TOPIC_ROUTING_KEY);
    }

}
